4.String
1.概述
String是引用数据类型,在java中用于存放字符串
2.特点
-字符串不可变,它们的值在创建后不能被更改
-虽然String的值是不可变的,但是它们可以被共享
-字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
3.构造方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class StringDemo { public static void main(String[] args) { //public String(),创建一个空白字符串对象,不含有任何内容 String s1=new String(); System.out.println("s1="+s1); //输出结果为 s1= //public String(char[] arr),根据字符数组的内容,来创建字符串对象 char[] arr={'a','b','c'}; String s2=new String(arr); System.out.println("s2="+s2);//输出结果为 s2=abc //public String(bytr[] arr1),根据字节数组的内容,来创建字符串对象 byte[] arr1={97,98,99};//97=a,98=b,99=c String s3=new String(arr1); System.out.println("s3="+s3);//输出结果为 s3=abc //String s="abc";直接赋值的方式创建字符串对象,内容就是abc String s4="abc"; System.out.println("s4="+s4); } }
|
4.String对象的特点
4.1.通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地域值不同

4.2.以””方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池种维护
4.3.存储分析












5.字符串的比较
使用**==**做比较
-基本类型:比较的是数据值是否相同
-引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
-public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是对象,所以参数直接传递一个字符串
6.案例
6.1遍历字符串

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import java.util.Scanner; public class Tttast { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.next(); int len=s.length(); char[] arr=new char[len]; for(int i=0;i<len;i++){ arr[i]=s.charAt(i); System.out.print(arr[i]+" "); } } } 输入14567 运行结果为 1 4 5 6 7
|
6.2统计字符次数

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.util.Scanner; public class StringTest { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.next(); int big=0,small=0,num=0; for(int i=0;i<s.length();i++){ char ch=s.charAt(i); if(ch>='A'&&ch<='Z'){ big++; }else if(ch>='a'&&ch<='z'){ small++; }else if(ch>='0'&&ch<='9'){ num++; } } System.out.println("big:"+big); System.out.println("small:"+small); System.out.println("num:"+num); } } 输入:AA2022libo 输出:big:2 small:4 num:4
|
6.3拼接字符串

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class StringTest01 { public static void main(String[] args) { int[] arr={1,2,3}; String s=Arr(arr); System.out.println(s); } public static String Arr(int[] arr1){ String s=""; s+="["; for(int i=0;i<arr1.length;i++){ if(i==arr1.length-1){ s+=arr1[i]; }else{ s+=arr1[i]; s+=", "; } } s+="]"; return s; } } 输出:[1, 2, 3]
|
6.4字符串反转

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class StringTest02 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.next(); String sss=Arr(s); System.out.println(sss); } public static String Arr(String ss){ char[] arr=new char[ss.length()]; String s=""; s+="["; for(int i=ss.length()-1,j=0;i>=0;i--,j++){ arr[j] = ss.charAt(i); if(i==0){ s +=arr[j]; }else { s += arr[j]; s += ", "; } } s+="]"; return s; } } 输入:abcde 输出:[e, d, c, d, a]
|
7.通过帮助文档查看String中的方法
即API查看

8.常用方法
1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| 0.boolean equals(Object anObject) 将此字符串与指定对象进行比较。 区分大小写,判断内容是否相等 1.boolean equalsIgnoreCase(String anotherString) 将此 String与其他 String比较,忽略案例注意事项。忽略大小写的判断内容是否相等 2.int indexOf(int ch) 返回指定字符第一次出现的字符串内的索引。索引从0开始,如果找不到,返回-1 3.int lastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引。索引从0开始,如果找不到,返回-1 4.String substring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串 5.String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串 6.String trim() 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。即删除前后空格
public class StringDemo01 { public static void main(String[] args) {
String s1="hello"; String s2="Hello"; System.out.println(s1.equals(s2));
String s3="hello"; String s4="Hello"; System.out.println(s3.equalsIgnoreCase(s4));
String s5="hello@java@li"; int index=s5.indexOf('@'); int index2=s5.indexOf('$'); int index5=s5.indexOf("java"); System.out.println(index+" "+index2+" "+index5);
String s6="hello@java@li"; int index3=s6.lastIndexOf('@'); int index4=s6.lastIndexOf('$'); int index6=s6.lastIndexOf("java"); System.out.println(index3+" "+index4+" "+index6);
String s7="hello,李白";
System.out.println(s7.substring(6));
System.out.println(s7.substring(0,5));
String s8=" hello world "; System.out.println(s8.trim()); } }
|
2.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| 0.String replace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。即替换字符串中的字符 1.int compareTo(String anotherString) 按字典顺序比较两个字符串。即比较两个字符串的大小 2.char[] toCharArray() 将此字符串转换为新的字符数组。即把字符串转换为字符数组 3.String concat(String str) 将指定的字符串连接到该字符串的末尾。 4.String toLowerCase() 将所有在此字符 String使用默认语言环境的规则,以小写。 5.String toUpperCase() 将所有在此字符 String使用默认语言环境的规则大写。 6.String[] split(String regex) 将此字符串分割为给定的 regular expression的匹配。即分割字符串,对于某些分割字符,需要转义,比如|\\等
public class StringDemo02 { public static void main(String[] args) {
String s="hello world";
String ss=s.replace("hello","Hello"); System.out.println(ss); System.out.println(s);
s=s.replace("hello","Hello"); System.out.println(s);
String s1="jcva"; String s2="java"; System.out.println(s1.compareTo(s2));
String s3="happy"; char[] arr=s3.toCharArray(); for(int i=0;i<s3.length();i++) { System.out.print(arr[i] + " "); }
String s4="李白"; s4 = s4.concat("爱").concat("写诗").concat("和喝酒"); System.out.println(s4);
String s5="Hello"; System.out.println(s5.toLowerCase());
System.out.println(s5.toUpperCase());
String s6="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦"; String[] s7=s6.split(","); System.out.println(s7[0]); for(String poem:s7){ System.out.print(poem+" "); } String s8="C:\\Tast\\java"; String[] s9=s8.split("\\\\"); for(String luji:s9){ System.out.print(luji+" "); } } }
|
5.StringBuilder
1.概述


-StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器
-这里的可变指的是StringBuilder对象中的内容是可变的
2.构造方法

1 2 3 4 5 6 7 8 9 10 11 12
| class StringBuilder01 { public static void main(String[] args) { //public StringBuilder(),创建一个空白的字符串对象,不含有任何内容 StringBuilder s1=new StringBuilder(); System.out.println("s1:"+s1+" "+s1.length()); //public StringBuilder(String str),根据字符串的内容,来创建可变字符串对象 StringBuilder s2=new StringBuilder("hello"); System.out.println("s2:"+s2+" "+s2.length()); } } 输出:s1:0 s2:hello 5
|
3.添加和反转方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class StringBuilder02 { public static void main(String[] args) { // 创建对象 StringBuilder s=new StringBuilder(); /* public StringBuilder append(任意类型);添加类型,并返回对象本身 StringBuilder s1=s.append("hello"); System.out.println("s:"+s); System.out.println("s1:"+s1); System.out.println(s==s1); 输出s:hello s1:hello true */ /* s.append("hello"); s.append("world"); s.append("java"); s.append(100); System.out.println("s:"+s); 输出:helloworldjava100 */ s.append("hello").append("world").append("java").append(100); System.out.println("s:"+s); // 输出:helloworldjava100 // public StringBuilder reverse();返回相反的字符序列 s.reverse(); System.out.println("s:"+s); // 输出:s:001avajdlrowolleh } }
|
4.StringBuilder和String相互转换
4.1 StringBuilder转换为String
public String toString(_):通过toString()就可以实现把StringBuilder转换为Strng
1 2 3 4
| StringBuilder s=new StringBuilder(); s.append("hello"); String s1=s;//这个是错误的 String s1=s.toString();
|
4.2 String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以把String转换为StringBuilder
1 2 3
| String s="hello"; StringBuilder s1=s;//这个是错误的 StringBuilder s1=new StringBuilder(s);
|
5.案例
5.1拼接字符串

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class StringBuilder03 { public static void main(String[] args) { int[] arr={1,2,3}; String s=Arr(arr); System.out.println(s); } public static String Arr(int[] arr1){ StringBuilder s=new StringBuilder(); s.append("["); for(int i=0;i<arr1.length;i++){ if(i== arr1.length-1){ s.append(arr1[i]); }else{ s.append(arr1[i]).append(", "); } } s.append("]"); String s1=s.toString(); return s1; } }
|
5.2字符串反转

```plain
class StringBuilder04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String ss=sc.next();
String sss=Arr(ss);
System.out.println(sss);
}
public static String Arr(String s){
// StringBuilder s1=new StringBuilder(s);
// s1.reverse();
// String s3=s1.toString();
// return s3;
return new StringBuilder(s).reverse().toString();
}
}
输入:1234
输出:4321